package com.teamin.service;

import com.teamin.entity.UserEntity;
import com.teamin.entity.WxUserEntity;
import com.teamin.web.exception.GlobalErrorInfoException;
import org.springframework.stereotype.Component;

import java.util.Date;

@Component
public interface UserService {
	int deleteUser(Long id);

	public static  final int SMALL_FROM_ID_STATE_USE = 0 ; //可用状态
	public static  final int SMALL_FROM_ID_STATE_USEING = 1 ; //使用中
    public static  final int SMALL_FROM_ID_STATE_USED = 1 ;// 已使用
    /**
     * 添加用户 ID 会返回到 TaskEntity 中的userId 中
     * {username(必) ,headIcon,company}
     * @param record ,
     * @return 0表示没有添加成功,1表示添加成功
     * @throws GlobalErrorInfoException 
     */
	long addUser(UserEntity record) throws GlobalErrorInfoException;

    /**
     * 查询 用户的信息
     * @param id 用户ID
     * @return 用户信息
     * @throws GlobalErrorInfoException 
     */
    UserEntity selectUser(Long id) throws GlobalErrorInfoException;

    /**
     * 更新用户信息,选择性的,更新不为空的字段
     * @param record 包括这些参数 {userName,headIcon,company} 都是可选 userId必传
     * @return
     * @throws GlobalErrorInfoException 
     */
    long updateUser(UserEntity record) throws GlobalErrorInfoException;

    /**
     * 微信登陆
     * @return
     * @throws GlobalErrorInfoException
     */
    public UserEntity wxLogin(WxUserEntity wxUserEntity) throws GlobalErrorInfoException;

    int cancleMPAttention(String mpOpenId);

    /**
     * 添加或更新微信用户 针对小程序
     * @param wxUserEntity
     * @return
     * @throws GlobalErrorInfoException
     */
    UserEntity saveOrUpdateWxUser(WxUserEntity wxUserEntity) throws GlobalErrorInfoException;

    boolean userExist(Long userId);

    /**
     * FIXME 此方法应该移至CircleDAO 中
     * 用户是否存在此圈子中
     * @param userId 用户ID
     * @param circleId 圈子ID
     * @return true 存在此用户,false 不存在
     */
	boolean userInCircle(Long userId, Long circleId);

    /**
     * FIXME 此方法应该移至CircleDAO 中
     * 用户是否关注了此任务
     * @param userId 用户ID
     * @param taskId 任务ID
     * @return true 已关注,false 未关注
     */
	boolean userInTask(Long userId, Long taskId);

    /**
     * 更新小程序的from
     * @param fromId 小程序提交表单ID
     * @param state 0表示没有使用,1表示正在使用2表示已使用
     */
    public int updateSmallFromIdState(Long userId,String fromId,Integer state) ;

    /**
     * 新增小程序的from
     * @param fromId 小程序提交表单ID
     */
    public int addSmallFromId(Long userId,String fromId) ;

    String getFromId(Long userId);
    
	/**
	 * 微信扫码登陆
	 */
	UserEntity wxPcLogin(String code, String state) throws GlobalErrorInfoException;

    Long getUnreadCount(Long userId);

    Long updateLoginTime(Long userId);

    Date getLoginTime(Long userId);
}
